#ifndef __MOS_STRING_H
#define __MOS_STRING_H
#ifdef __cplusplus
extern "C" {
#endif

#include "mos_util.h"

extern int vasprintf(char **strp, const char *fmt, va_list ap);

/*  去掉字符串头部空白数据  */
S32  str_begain_trim(SPTR src);

/* 去掉字符串末尾空白，不包括 \0 */
Void  str_end_trim(SPTR str, S32 len);

/*  判读是否为数字串 */
BOOL  str_isdigit(const SPTR str);

/* 计算分割符个数 */
S32   str_stoken_count(const SPTR src, const SPTR delim);

/* 分割字符串 */
SPPTR str_stoken(const SPTR src, const SPTR delim);

/* 释放切割字符串内存和  str_stoken 配套函数*/
Void  str_stoken_free(SPPTR p);


//=========超级字符串=======SString 模块类============================

/* 超级字符串数据结构 */
typedef struct {
    SPTR str;   /* 字符串存储位置 */
    U32 mSize; /* 字符串所在内存大小 */
    U32 sLen; /* 字符串长度 */
} SString;

/* 获取字符串的长度 */
#define sstring_getlen(s) ((s)->sLen)

/* 获取字符串 */
#define sstring_getstr(s) ((s)->str)

/* 新建一个SString */
SString *sstring_new(const SPTR str);
SString *sstring_new_sized(const U32 len);

/* 使用 \0 清空字符串  */
Void sstring_clear(SString *ss);

/* 释放内存 */
Void sstring_free(SString *ss);

/* 存入格式化内容 */
Void sstring_format(SString *ss, const char *fmt, ...);

/* 追加内容 */
S32  sstring_append(SString *dst, const SPTR str, U32 len);
Void sstring_append_format(SString *ss, const char *fmt,  ...);

/* 增加内存分配 */
S32  sstring_realloc(SString *ss, U32 amt);

/* 字符串拷贝 */
S32  sstring_scpy(SString *ss, const SPTR str, U32 len);

/* 内存拷贝 */
S32  sstring_mcpy(SString *ss, const SPTR str, U32 len);


#ifdef __cplusplus
}
#endif

#endif /* __MOS_STRING_H */

